package ua.diploma.front;

import java.io.IOException;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;



/**
 * EncodingFiltr проверяет каждый запрос на наличие кодировки,
 * если кодировки нет, или она не соответствует заданной, то меняет 
 * кодировку на UTF-8
 * 
 * @author netstalk3r
 */
@WebFilter(filterName = "encodingFilter", urlPatterns = { "/*" }, initParams = { @WebInitParam(name = "encoding", value = "UTF-8") })
public class EncodingFilter implements Filter {

	/**
	 * логгер
	 */
	private static final Logger log = Logger.getLogger(EncodingFilter.class);

	// кодировка запроса
	private String encoding;

	/**
	 * конструктор по умолчанию
	 */
	public EncodingFilter() {
		super();
	}

	/**
	 * остановка приложения
	 */
	public void destroy() {
		log.info("EncodingFilter остановлен: " + new Date().toString());
	}

	/**
	 * перекодировка завпросов
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		log.info("EncodingFilter работает");
		log.info("Request uri --> "
				+ ((HttpServletRequest) request).getRequestURI());
		String requestEncoding = request.getCharacterEncoding();
		if (requestEncoding == null || !requestEncoding.equals(encoding)) {
			log.info("Кодировка запроса: " + requestEncoding
					+ ", устанавливаем кодировку: " + encoding);
			request.setCharacterEncoding(encoding);
		}
		chain.doFilter(request, response);
	}

	/**
	 * инициализация - при старте и считывание параметра кодировки
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		log.info("EncodingFilter инициализирован: " + new Date().toString());
		encoding = fConfig.getInitParameter("encoding");
		log.info("Кодировка из параметров фильтра ---> " + encoding);
	}

}
